/**
 * @author 张慧华 z@j-ui.com
 *
 */
(function ($) {
    $.fn.extend({

        /**
         * options: reverse[true, false], eventType[click, hover], currentIndex[default index 0]
         *            stTab[tabs selector], stTabPanel[tab panel selector]
         *            ajaxClass[ajax load], closeClass[close tab]
         */
        tabs: function (options) {
            var op = $.extend({
                reverse: false,
                eventType: "click",
                currentIndex: 0,
                stTabHeader: "> .tabsHeader",
                stTab: ">.tabsHeaderContent>ul",
                stTabPanel: "> .tabsContent",
                ajaxClass: "j-ajax",
                closeClass: "close",
                prevClass: "tabsLeft",
                nextClass: "tabsRight"
            }, options);

            return this.each(function () {
                initTab($(this));
            });

            function initTab(jT) {
                var jSelector = jT.add($("> *", jT));
                var jTabHeader = $(op.stTabHeader, jSelector);
                var jTabs = $(op.stTab + " li", jTabHeader);
                var jGroups = $(op.stTabPanel + " > *", jSelector);

                jTabs.unbind().find("a").unbind();
                jTabHeader.find("." + op.prevClass).unbind();
                jTabHeader.find("." + op.nextClass).unbind();

                jTabs.each(function (iTabIndex) {
                    if (op.currentIndex == iTabIndex) $(this).addClass("selected");
                    else $(this).removeClass("selected");

                    if (op.eventType == "hover") $(this).hover(function (event) {
                        switchTab(jT, iTabIndex)
                    });
                    else $(this).click(function (event) {
                        switchTab(jT, iTabIndex)
                    });

                    $("a", this).each(function () {
                        var $link = $(this);
                        if ($link.hasClass(op.ajaxClass)) {
                            $link.click(function (event) {
                                var jGroup = jGroups.eq(iTabIndex);
                                if (this.href && ($(this).attr('data-cache') == 'false' || !jGroup.attr("loaded"))) jGroup.loadUrl(this.href, {}, function () {
                                    jGroup.find("[layoutH]").layoutH();
                                    jGroup.attr("loaded", true);
                                });
                                event.preventDefault();
                            });

                        } else if ($link.hasClass(op.closeClass)) {
                            $link.click(function (event) {
                                jTabs.eq(iTabIndex).remove();
                                jGroups.eq(iTabIndex).remove();
                                if (iTabIndex == op.currentIndex) {
                                    op.currentIndex = (iTabIndex + 1 < jTabs.size()) ? iTabIndex : iTabIndex - 1;
                                } else if (iTabIndex < op.currentIndex) {
                                    op.currentIndex = iTabIndex;
                                }
                                initTab(jT);
                                return false;
                            });
                        }
                    });
                });

                switchTab(jT, op.currentIndex);

                // 折叠tab
                var collapse = jT.hasClass("collapse"),
                    $tabsHeaderContent = jTabHeader.find('>.tabsHeaderContent');
                var collapseFn = function (event) {
                    if (jT.hasClass("close")) {
                        jT.removeClass('close');
                    } else {
                        jT.addClass('close');
                    }
                };
                if (collapse) {
                    var $icon = $('<a href="javascript:" class="icon-collapse"></a>').addClass(close ? op.exp : op.coll).insertAfter($tabsHeaderContent);
                    $icon.click(collapseFn);
                }
            }

            function switchTab(jT, iTabIndex) {
                var jSelector = jT.add($("> *", jT));
                var jTabHeader = $(op.stTabHeader, jSelector);
                var jTabs = $(op.stTab + " li", jTabHeader);
                var jGroups = $(op.stTabPanel + " > *", jSelector);

                var jTab = jTabs.eq(iTabIndex);
                var jGroup = jGroups.eq(iTabIndex);
                if (op.reverse && (jTab.hasClass("selected"))) {
                    jTabs.removeClass("selected");
                    jGroups.hide();
                } else {
                    op.currentIndex = iTabIndex;
                    jTabs.removeClass("selected");
                    jTab.addClass("selected");

                    jGroups.hide().eq(op.currentIndex).show();
                }

                if (!jGroup.attr("inited")) {
                    jGroup.attr("inited", 1000).find("input[type=text]").filter("[alt]").inputAlert();
                }
            }

        }
    });
})(jQuery);